package com.hky.aiagent.tools;

import cn.hutool.core.io.FileUtil;
import com.hky.aiagent.constant.FileConstant;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;

/**
 * @author hky
 */

public class FileOperationTool {

    private final String FILE_DIR = FileConstant.FILE_SAVE_PATH + "/file";

    /**
     * 读取文件内容
     * 使用此方法可以读取指定文件的全部内容
     *
     * @param fileName 文件名，需要读取的文件的名称
     * @return 文件内容如果读取过程中发生错误，返回错误信息
     */
    @Tool(description = "Read content from a file")
    public String readFile(@ToolParam(description = "Name of a file to read") String fileName) {
        // 拼接文件路径
        String filePath = FILE_DIR + "/" + fileName;
        try {
            // 使用FileUtil工具类读取文件内容，如果读取成功，返回文件内容
            return FileUtil.readUtf8String(filePath);
        } catch (Exception e) {
            // 如果读取过程中发生异常，返回错误信息
            return "Error reading file: " + e.getMessage();
        }
    }


    /**
     * 将指定内容写入文件。
     * <p>
     * 该方法根据给定的文件名构建文件路径，并尝试将内容写入该文件。
     * 如果写入成功，返回成功提示；否则返回包含错误信息的提示。
     *
     * @param fileName 要写入的文件的名称。用于与文件目录拼接生成完整路径。
     * @param content  要写入文件的内容。该内容将以UTF-8编码写入指定文件。
     * @return 返回一个字符串，表示文件写入操作的结果。
     * 如果文件写入成功，返回 "File written successfully."。
     * 如果在写入过程中发生异常，返回 "Error writing file:" 加上具体的错误信息。
     */
    @Tool(description = "Write content to a file")
    public String writeFile(@ToolParam(description = "Name of a file to write") String fileName,
                            @ToolParam(description = "Content to write to the file") String content) {
        // 构造完整的文件路径：通过将文件目录和文件名拼接在一起
        String filePath = FILE_DIR + "/" + fileName;

        try {
            // 尝试以 UTF-8 编码将内容写入指定路径的文件中
            FileUtil.writeUtf8String(content, filePath);

            // 文件写入成功时返回成功消息
            return "File written successfully.";
        } catch (Exception e) {
            // 捕获并处理写入文件期间发生的任何异常，返回错误消息
            return "Error writing file: " + e.getMessage();
        }
    }


}
